package com.itbaizhan.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

//通知类
public class MyAspectAdvice {
    //后置通知 打印切点的信息 要加参数 JoinPoint
    public void myAfterReturning(JoinPoint joinPoint){
        System.out.println("切点方法名"+joinPoint.getSignature().getName());
        System.out.println("目标对象"+joinPoint.getTarget());
        System.out.println("打印日志"+joinPoint.getSignature().getName()+"方法被执行");
    }

    /*前置通知*/
    public void myBefore(){
        System.out.println("前置通知");
    }
    //异常通知
    public void myAfterThrowing(Exception ex){
        System.out.println("异常通知");
        System.out.println(ex.getMessage());
    }
    //最终通知   可用于释放资源  报异常也可以释放
    public void myAfter(){
        System.out.println("最终通知");
    }

    //环绕通知
    public Object myAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("环绕前");
        Object obj = proceedingJoinPoint.proceed();//执行的方法
        System.out.println("环绕后");
        return obj;
    }
}
/*AOP有以下几种常用的通知类型：

通知类型	描述
前置通知	在方法执行前添加功能
后置通知	在方法正常执行后添加功能
异常通知	在方法抛出异常后添加功能
最终通知	无论方法是否抛出异常，都会执行该通知
环绕通知	在方法执行前后添加功能*/